package me.yxy.mobanddd.finder.view.transport;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;


//TODO 如果在这里加一个自定义注解，自动生成一个对应的Repository，就好了，运用APT
/**
 * 纯粹的一个查询View，对于View的DAO方案，有两种：
 *
 * <p>1. 结合数据库的视图，这种方案更适用于分页与复杂查询，扩展性更好，维护性也并未太复杂（本View采用该模式）</p>
 * <p>2. 使用JPA的nativeSql，通过<code>new XXXView(column1,column2 ... ) </code>生成View，这种适合特定场景的简单全量查询，尽量不涉及分页与复杂参数的扩展性</p>
 */
@Entity
@Data
@Table(name = "v_transport")
public class TransportConsoleView {

    @Id
    private Long id;

    private String code;

    private String receiverName;

    private String receiverTel;

    private String receiverLocation;

    private Double receiveLongitude;

    private Double receiveLatitude;

    private Double distance;

    private Integer deliveryOrder;

    private Integer type;


    //-----仓库信息----------所有外键关联的数据，一般都会需要返回主键，这样才能触发查询
    private Integer warehouseId;
    private String warehouseName;

    //------调度单信息----------
    private Long shipmentId;
    private String shipmentStatus;

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") //这个格式化方案还是不错的，虽然每个time都要这样设置一下，但是毕竟有些只要日期，有些要完整时间，所以由业务自行决定
    private Date createdTime;

    //这个数据可能是从外部系统查询而来，并非数据库需要，所以，标记为非持久化
    @Transient
    private String externalData;

}
